package com.spring.lifecycle.config;
 
import com.spring.lifecycle.bean.HelloWorld;
import org.springframework.context.annotation.*;
 
@Configuration
@ComponentScan({"com.spring.lifecycle.config","com.spring.lifecycle.bean"})
public class Life1Config {

    /**
     * Bean的生命周期：
     *      构造 => 初始化前 => 初始化 => 初始化后 => 销毁
     *
     *      初始化：
     *              对象创建成功，并赋值好，调用初始化方法
     *      销毁：
     *              Singleton 单实例：容器关闭的时候
     *              Properties 实例模式：容器不会管理这个bean，容器不会调用销毁方法
     *  Spring控制bean声明周期的方法
     *      1、指定初始化(赋值之后) 和 销毁 的回调函数
     *              @Bean(initMethod = "init",destroyMethod = "destory")
     *      2、实现接口的方式（InitializingBean, DisposableBean）自定义初始化、销毁逻辑
     *              public class Boy implements InitializingBean, DisposableBean {}
     *      3、可以使用JSR250
     *              @PostConstruct，在bean创建成功并且属性复制成功，来执行初始化方法
     *              @PreDestory，在容器销毁bean之前通知我们进行清理工作
     *      4、实现接口 BeanPostProcessor
     *
     *  Spring底层对BeanProcessor的使用
     *          bean赋值，注入其他组件，@Autowired，生命周期注解功能，@Async
     */
    @Bean(initMethod = "init",destroyMethod = "destory")
    public HelloWorld helloWorld(){
        return new HelloWorld();
    }
 
}